package file;

import java.io.File;
import java.io.IOException;
import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 张杰
 * Date: 2022-04-19
 * Time: 17:07
 */
//案例1:实现查找文件并删除
public class Demo8 {
    public static void main(String[] args) {
        //1.先输入要扫描的目录,以及要删除的文件名
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要扫描的文件路径: ");
        String rootDirPath = sc.next();
        System.out.println("请输入要删除的文件名: ");
        String toDeleteName = sc.next();
        //判断输入的路径是否正确(是否是路径)
        File rootDir = new File(rootDirPath);
        if(!rootDir.isDirectory()) {
            System.out.println("输入的扫描路径有误!");
            return;
        }
        //2.遍历目录,并把指定目录中的所有文件和子目录都遍历以便,从而找到要删除的文件
        // 通过这个方法来实现递归遍历并删除操作
        scanDir(rootDir,toDeleteName);
    }

    private static void scanDir(File rootDir,String toDeleteName) {
        //1.先列出 rootDir 中都有哪些内容
        File[] files = rootDir.listFiles();
        if(files == null) {
            //空目录
            return;
        }
        //2.遍历当前列出的内容,如果是普通文件,就检测文件名是否是要删除的文件
        //  如果是目录,就递归的进行遍历
        for (File f:files) {
            if(f.isFile()) {
                //普通文件
                if(f.getName().contains(toDeleteName)) {
                    deleteFile(f);
                }
            }else if(f.isDirectory()) {
                //目录文件,要进行递归的进行遍历
                scanDir(f,toDeleteName);
            }
        }
    }

    private static void deleteFile(File f) {
        try {
            System.out.println(f.getCanonicalPath() + "确认要删除吗? (Y/N)");
            Scanner sc = new Scanner(System.in);
            String choice = sc.next();
            if(choice.equals("Y") || choice.equals("y")) {
                f.delete();
                System.out.println("文件删除成功!");
            } else {
                System.out.println("文件取消删除!");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
